/**
 * Classe que representa um vagão para carregar granéis.
 */
public class VagaoGraneleiro extends Vagao {

	/**
	 * Variável usada para representar a capacidade do vagão
	 */
	private int capacidade;
	private int quantidadeatualcarregada = 0;//após um carregamento é a quantidade que foi preenchida num carregamento
	private int ocupacao = 0;//é o estado de ocupação da capacidade do vagão

	/* TODO inicializar variáveis internas */
	public VagaoGraneleiro(String codigo, int capacidade) {
		super(codigo);
		this.capacidade = capacidade;
	}

	/* TODO retornar capacidade do vagão */
	public int getCapacidade() {
		return capacidade;
	}

	/**
	 * Retorna a representação deste vagão como String.
	 */
	public String toString() {
		return "G|" + getCodigo() + "|" + getCapacidade() + "|" + quantidadeCarregada();
	}
	/*O que faz:(semelhante a um método put), altera a quantidadeatualcarregada e retorna true 
	 * se este vagao atendeu a quantidade de carga a ser carregada
	 * caso contrário retorna false
	 * (non-Javadoc)
	 * @see Carregavel#carregarCarga(int)
	 */
	@Override
	public boolean carregarCarga(int quantidade) {
		if((this.capacidade - this.ocupacao) >= quantidade){
			this.ocupacao =+quantidade;
			this.quantidadeatualcarregada = quantidade;
			return true;//este vagão é suficiente
		}
		else{
			this.quantidadeatualcarregada = this.getCapacidade()- this.ocupacao;//o espaço que restava para ser totalmente ocupado a capacidade do vagão
			this.ocupacao = this.getCapacidade();//foi totalmente ocupado
			return false; //este vagão não é suficiente
		}
	}
	/*O que faz: verifica se tem alguma carga pré-existente neste vagão
	 * (non-Javadoc)
	 * @see Carregavel#carregado()
	 */
	@Override
	public boolean carregado() {
		int cheio = getCapacidade();
		if( ocupacao == cheio) return true;
		else return false;
	}
	/*O que faz:(semelhante a um método get)
	 * (non-Javadoc)
	 * @see Carregavel#quantidadeCarregada()
	 */
	@Override
	public int quantidadeCarregada() {

		return quantidadeatualcarregada;
	}

}
